
package com.barnabe.filters;

import java.awt.image.BufferedImage;

/* @author Arthur F. Zanona */

public class Subtracao {
    public static BufferedImage executar ( BufferedImage imagem , BufferedImage imagemDois ) {
        // redeclarando para tornar-se mais claro
        int alturaUm = imagem.getRaster().getHeight() ,
            larguraUm = imagem.getRaster().getWidth(),
            alturaDois = imagem.getRaster().getHeight(),
            larguraDois = imagem.getRaster().getWidth();

        // ajustando para nao estourar os indices..
        int alturaControle = alturaUm > alturaDois ? alturaDois : alturaUm;
        int larguraControle = larguraUm > larguraDois ? larguraDois : larguraUm;

         for ( int i = 0 ; i < larguraControle ; i++  ) {
            for ( int j = 0 ; j < alturaControle ; j++ ) {
                int[] rgbUm = new int[3],
                      rgbDois = new int[3];
                imagem.getRaster().getPixel(i, j, rgbUm);
                imagem.getRaster().getPixel(i, j, rgbDois);
                // somando a area em comum
                rgbUm[0] -= rgbDois[0];
                rgbUm[1] -= rgbDois[1];
                rgbUm[2] -= rgbDois[2];
                imagem.getRaster().setPixel(i, j, rgbUm);
            }
         }
        return imagem;
    }

    public static Integer diferencaEntre ( BufferedImage imagem , BufferedImage imagemDois , Integer inicioWidth , Integer inicioHeight , Integer fimWidth , Integer fimHeight ) {
        int resultado[] = new int[3];
        int[] rgbUm = new int[3],
              rgbDois = new int[3];

         for ( int i = inicioWidth ; i < fimWidth ; i++  ) {
            for ( int j = inicioHeight ; j < fimHeight ; j++ ) {
                imagem.getRaster().getPixel(i, j, rgbUm);
                imagemDois.getRaster().getPixel(i, j, rgbDois);
                resultado[0] += (rgbUm[0]) - (rgbDois[0]);
                resultado[1] += (rgbUm[1]) - (rgbDois[1]);
                resultado[2] += (rgbUm[2]) - (rgbDois[2]);

            }
         }
        return (resultado[0] + resultado[1] + resultado[2] ) / 3;
    }

}
